Printers are common peripheral devices attached to computers. A printer allows a computer user to make a hard copy of documents that are created in a variety of applications and programs on a computer. To function properly, a channel of communication is established (e.g., via a network connection) between the printer and the computer to enable the printer to receive commands and information from the host computer.
Once a connection is established between a workstation and the printer, printing software is implemented at a print server to manage a print job from order entry and management through the complete printing process. The printing software may implement a pipes and filters architectural pattern (pipes/filters pattern) to process print job data streams. A pipes/filters pattern provides a structure for systems that process a stream of data, where each processing step is encapsulated in a filter component. Data is passed through pipes between adjacent filters.
A pipe/filter pattern is sequential in behavior, with each filter receiving an output of a previous filter as its input. Thus, pipes/filters patterns provide the benefit of breaking tasks into smaller units, resulting in increased flexibility and maintainability. A problem with the pipes/filters patterns is that it does not lend itself to solving problems that require look ahead capability. For instance, an individual filter is required to buffer sufficient information until it has that information prior to sending the buffered contents downstream.
Accordingly, a mechanism to solve pipeline look ahead problems without requiring a filter to buffer data large amounts of data is desired.